package main

import (
	"fmt"
	"strings"
)

//示例 1：
//
//输入: "babad"
//输出: "bab"
//注意: "aba"也是一个有效答案。
//示例 2：
//
//输入: "cbbd"
//输出: "bb"
// 判断回文，两个指针，一前一后同时移动,忽略大小写，只管字母和数字
func main() {
	str := strings.ToLower("A man, a plan, a canal: Panama")
	fmt.Println(checkParotum(str))

	str = strings.ToLower("")
	fmt.Println(checkParotum(str))

	str = strings.ToLower("race a car")
	fmt.Println(checkParotum(str))
}

func reserve(s string) string {
	arr := []rune(s)
	for left, right := 0, len(arr)-1; left < right; left, right = left+1, right-1 {
		arr[left], arr[right] = arr[right], arr[left]
	}

	return string(arr)
}

func checkIsNumAndChar(c rune) bool {
	if (c >= 'a' &&
		c <= 'z') ||
		(c >= 'A' &&
			c <= 'Z') ||
		(c >= '0' &&
			c <= '9') {
		return true
	}
	return false
}

func checkParotum(str string) bool {
	start := 0
	end := len(str) - 1

	for i := 0; i < len(str) && start <= end; i++ {
		a1 := rune(str[start])
		a2 := rune(str[end])

		for !checkIsNumAndChar(rune(a1)) {
			start++
			a1 = rune(str[start])
		}

		for !checkIsNumAndChar(rune(a2)) {
			end--
			a2 = rune(str[end])
		}

		if a1 != a2 {
			return false
		}
		start++
		end--
	}
	return true
}
